/**
 * 统一配置axios
 * 使用qs.stringify解决axios跨域问题
 */
//整个大项目的api地址
import Vue from 'vue'
import axios from 'axios'
import qs from 'qs'
import { isClient, getBuildEnv } from './utils.js'

//准备环境信息
let { isCpOrProd } = getBuildEnv()
let isProd = isCpOrProd
// axios 配置
axios.defaults.timeout = 5000

//开发环境下，服务端请求接口时，是不需要代理的，所以要去掉/local，客户端需要代理
// let server = 'http://www.tongkao100.com'
let server = isProd
  ? 'https://api.novenblog.xin'
  : 'http://test.api.novenblog.xin'
let client = '/local'

axios.defaults.baseURL = typeof window === 'undefined' ? server : client
axios.defaults.headers['Content-Type'] = 'application/json'

// http request 拦截器
axios.interceptors.request.use(
  config => {
    return config
  },
  err => {
    return Promise.reject(err)
  }
)

// http response 拦截器
/**
 * @DateTime  2017-05-08T09:19:43+0800
 * 拦截器也可以判定返回的response成功时的状态码进行拦截
 */
axios.interceptors.response.use(
  res => {
    //这种情况只有在开发模式热加载下才会you
    if (
      !res.data ||
      (res.data && !res.data.data && !res.errmsg && !res.data.errmsg)
    ) {
      //如果未收到服务器消息，则报错
      // return Promise.reject({
      //   errcode: -1 ,
      //   errmsg: '网络错误，请稍后再试！'
      // })

      //开发环境下，如果直接保存，会直接返回接口数据

      return res
    } else {
      let { data, errcode } = res.data

      //如果不是正常状态
      if (errcode !== 0) {
        if (errcode === 1001) {
          //没有登录，重定向到登录页面
          // 区分当前是在服务端还是客户端
          // if(isClient()) {
          //   location.href = '/login'
          // }else {
          //   console.log('in')
          // }
        }
        return Promise.reject(res.data)
      }

      //正常返回
      return data
    }
  },
  error => {
    return Promise.reject(error)
  }
)

export default axios
